package es.tid.jala.javame;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Gauge;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;

/**
 * @author jala
 */
public class Temporizador extends MIDlet implements CommandListener {

    private Display pantalla;
    private Form formularioDatos, formularioTemporizador;
    private Command empezarCommand = new Command("Empezar", Command.OK, 1);
    private Command salirCommand = new Command("Salir", Command.EXIT, 1);
    private Command repetirCommand = new Command("Repetir", Command.OK, 1);
    private int segundos = 0;

    public Temporizador() {
        formularioDatos = new Form("Temporizador");
        formularioDatos.append(new TextField("Segundos: ", "10", 50, TextField.NUMERIC));
        formularioDatos.addCommand(empezarCommand);
        formularioDatos.addCommand(salirCommand);
        formularioDatos.setCommandListener(this);

        formularioTemporizador = new Form("Temporizador en marcha");
        formularioTemporizador.append(new StringItem("Cuenta: ", String.valueOf(segundos)));
        formularioTemporizador.append(new Gauge("Porcentaje", false, 10 * 100, 0));
        formularioTemporizador.setCommandListener(this);

        pantalla = Display.getDisplay(this);
    }

    public void startApp() {
        pantalla.setCurrent(formularioDatos);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c, Displayable d) {
        if (d == formularioDatos) {
            if (c == empezarCommand) {
                final int max = Integer.parseInt(((TextField) formularioDatos.get(0)).getString());
                ((StringItem) formularioTemporizador.get(0)).setText(String.valueOf(segundos));
                pantalla.setCurrent(formularioTemporizador);

                new Thread(new TareaContador(max)).start();
            } else if (c == salirCommand) {
                destroyApp(false);
                notifyDestroyed();
            }
        } else if (d == formularioTemporizador) {
            segundos = 0;
            formularioTemporizador.removeCommand(repetirCommand);
            pantalla.setCurrent(formularioDatos);
        }
    }

    class TareaContador implements Runnable {

        int max;

        public TareaContador(int max) {
            this.max = max;
        }

        public void run() {
            StringItem texto = (StringItem) formularioTemporizador.get(0);
            Gauge g = (Gauge) formularioTemporizador.get(1);

            g.setValue(0);
            g.setMaxValue(max * 100);

            for (int i = 0; i < max; i++) {
                try {
                    Thread.sleep(1000);
                } catch (Exception e) {
                    System.out.println("TareaContador interrumpida");
                }
                segundos++;

                texto.setText(String.valueOf(segundos));
                g.setValue(segundos * 100);
            }

            formularioTemporizador.addCommand(repetirCommand);
        }
    }
}
